#ifndef OMNI_CHASSIS_H_
#define OMNI_CHASSIS_H_

#include "motor_driver.h"
#include "base_chassis.h"

typedef enum IRRIGATION_STATUS
{
    PLACEMEDICINE_NONE = 0,
    AIR,
    BIR,
    CIR,
    DIR,
} IRRIGATION_STATUS;

#define OMNI_DRIVE_MOTOR_BASE_CANID 101 // 驱动轮CAN ID基址

typedef struct OmniChassis_t
{
    BaseChassis_s *base; // 该结构体一直存在，子类只需关联其指针
    // VESCDriver_t drive_motors[4];
    MotorDriver_s drive_motors[4];
    char motor_can_flag; // 在定时中断中置1，控制can消息发送频率
} OmniChassis_t;



void Omni_ChassisMove(float target_speed, float target_dir, float target_omega);
void OmniChassis_Exe();
void OmniChassis_Init();
void DJI_velCtrAll(int16_t vel[4]);
void IR_exe();
void PLAY_AUDIO_0(UART_HandleTypeDef *huart);
void PLAY_AUDIO_1(UART_HandleTypeDef *huart);
void PLAY_AUDIO_2(UART_HandleTypeDef *huart);
void PLAY_AUDIO_3(UART_HandleTypeDef *huart);
void PLAY_AUDIO_4(UART_HandleTypeDef *huart);
void PLAY_AUDIO_5(UART_HandleTypeDef *huart);
void PLAY_AUDIO_6(UART_HandleTypeDef *huart);
void PLAY_AUDIO_7(UART_HandleTypeDef *huart);
void PLAY_AUDIO_8(UART_HandleTypeDef *huart);
void PLAY_AUDIO_9(UART_HandleTypeDef *huart);
void PLAY_AUDIO_10(UART_HandleTypeDef *huart);
void PLAY_AUDIO_11(UART_HandleTypeDef *huart);
void PLAY_AUDIO_12(UART_HandleTypeDef *huart);
void PLAY_AUDIO_13(UART_HandleTypeDef *huart);
void PLAY_AUDIO_14(UART_HandleTypeDef *huart);
void PLAY_AUDIO_15(UART_HandleTypeDef *huart);
void PLAY_AUDIO_16(UART_HandleTypeDef *huart);
void PLAY_AUDIO_17(UART_HandleTypeDef *huart);
void PLAY_AUDIO_18(UART_HandleTypeDef *huart);
void PLAY_AUDIO_19(UART_HandleTypeDef *huart);
void PLAY_AUDIO_20(UART_HandleTypeDef *huart);
void PLAY_AUDIO_21(UART_HandleTypeDef *huart);
extern char MotorCANSendFlag; // 需要在定时中断中置1，控制发送频率
extern OmniChassis_t OmniChassis;

#endif